# -*-coding:utf-8-*-

# 实现登陆注册的功能

from . import api
from flask import request, current_app, jsonify, session
from Ihome import redis_store, db
from Ihome.models import User
from Ihome.utils.response_code import RET
from Ihome.utils.common import login_required

@api.route('/session')
def check_user_login():
    '''
    判断是否登陆,如果登陆返回扥路的信息:用户名,用户id
    :return:
    '''
    user_id=session.get('user_id')
    name=session.get('name')
    return jsonify(errno=RET.OK,errmsg='OK',data={'user_id':user_id,'name':name})

@api.route('/session', methods=['DELETE'])
@login_required
def logout():
    # 清除用户登录的信息
    session.pop('name', None)
    session.pop('mobile', None)
    session.pop('user_id', None)
    return jsonify(errno=RET.OK, errmsg='OK')


@api.route('/session', methods=['post'])
def login():
    # 1 获取参数
    data_dict = request.json
    mobile = data_dict.get('mobile')
    password = data_dict.get('password')

    if not all([mobile, password]):
        return jsonify(errno=RET.PARAMERR, errmsg='参数不完整')

    # 2 找到对应手机号的用户
    try:
        user = User.query.filter_by(mobile=mobile).first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='用户不存在')

    # 3 校验密码
    if not user.check_password(password):
        return jsonify(errno=RET.PWDERR, errmsg='用户名或密码错误')

    # 4 保存登陆状态并返回结果
    session['name'] = user.name
    session['mobile'] = user.mobile
    session['user_id'] = user.id

    # 5 返回结果
    return jsonify(errno=RET.OK, errmsg='登陆成功')


@api.route('/users', methods=['POST'])
def register():
    '''
    1 获取参数并判断是否有值
    2 取到本地的验证码
    3 将本地验证码和传入的短信码进行对比,如果一样
    4 创建用户模型,并设置数据,并添加数据库
    5 返回结果
    :return:
    '''
    # 获取参数并判断是否有值
    data_dict = request.json
    mobile = data_dict.get('mobile')
    phonecode = data_dict.get('phonecode')
    password = data_dict.get('password')

    if not all([mobile, phonecode, password]):
        return jsonify(errno=RET.PARAMERR, errmsg='参数不全')

    # 取到本地的验证码
    try:
        sms_code = redis_store.get('SMS_' + mobile)
        redis_store.delete('SMS_' + mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='本地短信验证码获取失败')

    if not sms_code:
        return jsonify(errno=RET.NODATA, errmsg='短信验证码过去')

    # 将本地验证码和传入的短信码进行对比
    if phonecode != sms_code:
        return jsonify(errno=RET.DATAERR, errmsg='短信验证码错误')

    # 创建用户模型,并设置数据,并添加数据库
    user = User()
    # 设置数据
    user.name = mobile
    user.mobile = mobile
    user.password = password
    # 保存用户数据
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(error=RET.DBERR, errmsg='保存数据失败')

    # 保存登陆状态
    session['name'] = mobile
    session['mobile'] = mobile
    session['user_id'] = user.id

    # 返回结果
    return jsonify(error=RET.OK, errmsg='注册成功')
